from fastapi import APIRouter, Body, Path, Query

import typing as T
from ...pojo.vo.Result import Result
from ...pojo.dto.UserSessionDTO import UserSessionDTO
from ..service.UserSessionServiceImpl import UserSessionService


router = APIRouter(prefix="/session", tags=["用户会话接口"])


@router.post("", response_model=Result)
async def create_session(
    service: UserSessionService,
    userSessionDTO: T.Annotated[UserSessionDTO, Body(description="用户会话窗口的参数")],
):
    """
    # 创建会话窗口

    请求体中必须传递用户的id，会话窗口的名称【可选】

    ## 请求体示例

    ```json
    {
        "userId": 1,
        "alias": "我的会话窗口"
    }
    ```

    ## 返回示例

    ```json
    {
        "code": 1,
        "data": null,
        "msg": "success"
    }
    ```
    """
    await service.create_session(userSessionDTO)
    return Result.success()


@router.get("/{id}", response_model=Result)
async def get_session_by_user_id(
    service: UserSessionService, id: T.Annotated[int, Path(description="用户id")]
):
    """
    # 获取会话窗口列表

    根据用户的id获取用户的会话窗口列表

    ## 返回示例

    ```json
    {
        "code": 1,
        "data": [
            {
                "id": 1,
                "userId": 1,
                "alias": "我的会话窗口",
                "createTime": "2023-07-09T09:09:09.000+00:00",
            }
        ],
        "msg": "success"
    }
    """
    result = await service.get_session_by_user_id(id)
    return Result.success(result)


@router.get("/history/{sessionId}", response_model=Result)
async def get_chat_history_by_session_id(
    service: UserSessionService,
    sessionId: T.Annotated[int, Path(description="会话id")],
    count: T.Annotated[
        int, Query(description="需要的获取的聊天记录数【默认为-1，表示全部获取】")
    ] = -1,
):
    """
    # 获取聊天记录【倒叙排列】

    根据会话id获取聊天记录，根据查询参数count来控制获取的聊天记录数，默认为-1，表示全部获取

    ## 返回示例

    ```json
    {
        "code": 1,
        "msg": "success",
        "data": [
            {
            "id": 6,
            "sessionId": 1,
            "isAi": true,
            "content": [
                {
                "type": "text",
                "text": "谢谢你的夸奖！ 😊 我很高兴能帮到你！如果以后还需要更多关于教学备课的帮助，或者想了解有趣的数学知识、笑话，随时都可以来找我哦！让我们一起让课堂变得更生动有趣吧！ 🚀
                        有什么其他问题或需求吗？"
                }
            ]
            },
            {
            "id": 5,
            "sessionId": 1,
            "isAi": false,
            "content": [
                {
                "type": "text",
                "text": "你真棒"
                }
            ]
            },
            {
            "id": 4,
            "sessionId": 1,
            "isAi": true,
            "content": [
                {
                "type": "text",
                "text": "当然可以！关于二次函数的笑话可能需要一点数学幽默感，以下是一个与二次函数相关的趣味小段子：
                        ---
                        **老师问小明：**
                        “如果一个二次函数的图像开口向上，最低点在 (0, -3)，你能告诉我它的顶点坐标吗？”
                        **小明想了想，说：**
                        “老师，这个问题太简单了，连抛物线自己都知道它的最低点在哪里——因为它‘心如止水’，永远停留在顶点 (0, -3)！”
                        **老师追问：**
                        “那如果开口向下呢？”
                        **小明耸耸肩，答道：**
                        “那它就变成了一位悲观主义者，总是觉得世界在往下掉，所以它的最高点就是它的‘人生巅峰’啦！”
                        ---
                        希望这个小笑话能让你会心一笑！如果你需要更正式的教学内容或教案设计，请随时告诉我哦！ 😊"
                }
            ]
            },
            {
            "id": 3,
            "sessionId": 1,
            "isAi": false,
            "content": [
                {
                "type": "text",
                "text": "你给我讲一个关于二次函数的笑话"
                }
            ]
            },
            {
            "id": 2,
            "sessionId": 1,
            "isAi": true,
            "content": [
                {
                "type": "text",
                "text": "你好！很高兴为你提供教学备课支持。请告诉我你需要备课的学科、年级、主题以及具体的需求，比如课时安排、教学目标或者学生的特点等，我会根据你的需求制定详细的备课方案！ 😊"
                }
            ]
            },
            {
            "id": 1,
            "sessionId": 1,
            "isAi": false,
            "content": [
                {
                "type": "text",
                "text": "你好"
                }
            ]
            }
        ]
    }
    ```
    """
    result = await service.get_chat_history(sessionId, count)
    return Result.success(result)


@router.put("", response_model=Result)
async def update_session_name_by_session_id(
    service: UserSessionService,
    sessionId: int = Body(description="会话id"),
    name: str = Body(description="要更改的会话名称"),
):
    """
    # 修改会话窗口名称

    根据会话id修改会话窗口名称

    ## 请求体示例

    ```json
    {
        "sessionId": 1,
        "name": "我的会话窗口"
    }
    ```
    ## 返回示例

    ```json
    {
        "code": 1,
        "data": null,
        "msg": "success"
    }
    """
    await service.update_session_name_by_session_id(sessionId, name)
    return Result.success()


@router.delete("/{sessionId}", response_model=Result)
async def delete_by_session_id(
    service: UserSessionService, sessionId: T.Annotated[int, Path(description="会话id")]
):
    """
    # 删除会话窗口

    根据会话id删除会话窗口

    ## 返回示例

    ```json
    {
        "code": 1,
        "data": null,
        "msg": "success"
    }
    ```
    """
    await service.delete_session_by_session_id(sessionId)
    return Result.success()
